package cn.jlearn.proxy.server.container;

import cn.jlearn.proxy.common.container.ServerContainer;
import cn.jlearn.proxy.server.listener.ProxyServerListener;
import cn.jlearn.proxy.server.handler.ProxyServerHandler;
import org.tio.server.ServerTioConfig;
import org.tio.server.TioServer;
import org.tio.server.intf.ServerAioHandler;
import org.tio.server.intf.ServerAioListener;

import java.io.IOException;

/**
 * @author qianyingchao
 * @version 1.0
 * @date 2021/5/10 4:06 下午
 */
public class ProxyServer extends ServerContainer {

    public static volatile ServerTioConfig serverTioConfig;

    public ProxyServer(String host, Integer port) {
        super(host, port);
    }

    @Override
    public void startServer(String host, Integer port) throws IOException {
        ServerAioHandler handler = new ProxyServerHandler();
        ServerAioListener listener = new ProxyServerListener();

        if (serverTioConfig == null) {
            synchronized (ProxyServer.class) {
                if (serverTioConfig == null) {
                    serverTioConfig = new ServerTioConfig("ProxyServer", handler, listener);
                }
            }
        }

        TioServer tioServer = new TioServer(serverTioConfig);
        tioServer.start(host, port);
    }

}
